﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GEAR_Structure.ClimateData
{
    [Serializable]
    public class Province
    {
        string abbreviation;//sigla della provincia
        string locality;//
        double altitude;//quota sul livello del mare della provincia [m]
        double latitude;//latitudine
        double longitude;//longitudine
        int gg;//gradi giorno del capoluogo di provincia
        double[] average_monthly_temperature;//temperature medie mensili dell'aria esterna del capoluogo di provincia
        double[] average_monthly_pressure;//pressioni di vapore medie mensili dell'aria esterna del capoluogo di provincia
        double project_temperature;//temperatura esterna di progetto del capoluogo di provincia
        double max_temperature;//temperatura massima di rifeimento [°C]
      
        double wind;//velocità del vento [m/s]
      //  int wind_zone;//zona di vento
            

        char climate_zone;//zona climatica dalla A alla F
        int day_heating_season;//
        double average_irradiance;//irradianza media mensile
        List<Common> commons;//lista dei comuni che appartengono alla provincia
        string name;//nome del capoluogo di provincia
        string region;//regione di apartenenza della provincia
        double deltat;//

        //costruttore
        public Province(Province p)
        {
            abbreviation = p.Abbreviation;
            locality = p.locality;
            altitude = p.altitude;
            latitude = p.latitude;
            longitude = p.longitude;
            gg = p.gg;
            average_monthly_temperature = p.average_monthly_temperature;
            average_monthly_pressure = p.average_monthly_pressure;
            project_temperature = p.project_temperature;
            max_temperature = p.max_temperature;
            wind = p.wind;
            climate_zone = p.climate_zone;
            day_heating_season = p.day_heating_season;
            average_irradiance = p.average_irradiance;
            commons = new List<Common>();
            foreach (Common c in p.commons)
                commons.Add(new Common(c));
            name = p.name;
            region = p.region;
            deltat = p.deltat;
        }

        public bool hasCommon(Common c)
        {
            return commons.Contains(c);
        }
        /// <summary>
        /// pressioni di vapore medie mensili dell'aria esterna del capoluogo di provincia
        /// </summary>
        public double[] Average_monthly_pressure
        {
            get { return average_monthly_pressure; }
            set { average_monthly_pressure = value; }
        }

        public double DeltaT
        {
            get { return deltat; }
            set { deltat = value; }
        }
        /// <summary>
        /// Regione di apartenenza della provincia
        /// </summary>
        public string Region
        {
            get { return region; }
            set { region = value; }
        }
        /// <summary>
        /// nome del capoluogo di provincia
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public string Locality
        {
            get { return locality; }
            set { locality = value; }
        }
        /// <summary>
        /// quota sul livello del mare della provincia [m]
        /// </summary>
        public double Altitude
        {
            get { return altitude; }
            set { altitude = value; }
        }

        public double Latitude
        {
            get { return latitude; }
            set { latitude = value; }
        }

        public double Longitude
        {
            get { return longitude; }
            set { longitude = value; }
        }

        public int GG
        {
            get { return gg; }
            set { gg = value; }
        }
        /// <summary>
        /// temperature medie mensili dell'aria esterna del capoluogo di provincia
        /// </summary>
        public double[] Average_monthly_temperature
        {
            get { return average_monthly_temperature; }
            set { average_monthly_temperature = value; }
        }

        public double Project_temperature
        {
            get { return project_temperature; }
            set { project_temperature = value; }
        }

        public double Max_temperature
        {
            get { return max_temperature; }
            set { max_temperature = value; }
        }

        public string Abbreviation
        {
            get { return abbreviation; }
            set { abbreviation = value; }
        }
        /// <summary>
        /// lista dei comuni che appartengono alla provincia
        /// </summary>
        public List<Common> Commons
        {
            get { return commons; }
            set { commons = value; }
        }

        public double Average_irradiance
        {
            get { return average_irradiance; }
            set { average_irradiance = value; }
        }

        public int Day_heating_season
        {
            get { return day_heating_season; }
            set { day_heating_season = value; }
        }

        public char Climate_zone
        {
            get { return climate_zone; }
            set { climate_zone = value; }
        }
        /// <summary>
        /// velocità del vento [m/s]
        /// </summary>
        public double Wind_zone
        {
            get { return wind; }
            set { wind = value; }
        }
        /// <summary>
        /// Zona vento
        /// </summary>
       /*
        public int Wind_zone
        {
            get { return wind_zone; }
            set { wind_zone = value; }
        }
        */
        public void addCommon(Common c)
        {
            this.commons.Add(c);
        }

        public Province()
        {
            this.commons = new List<Common>();
            this.average_monthly_temperature = new double[12];
        }
    }
}
